#include "Socket.h"

void servir(Socket *s){
	char bufferServ[256];

	do{
		std::cout << "Espero recepcion\n";
		int recibido = s->recibir(&bufferServ, 256-1);
		bufferServ[recibido]= 0;
		std::cout << "Recibido: " << bufferServ << std::endl;
	}while(strcmp(bufferServ, "s") && s->esValido());
	s->cerrar();
}

int main(){

	std::cout << "Levanto el server\n";

	Socket serv("localhost", 1234);
	if(serv.enlazar()){
		int pid = fork();
		if(pid == 0){
			std::cout << "Levanto el serverX2\n";
			serv.escuchar();
			
			while(1){
				Socket *s2 = serv.aceptar();
			
				std::cout << "Acepto conexion\n";
			
				if(s2){
					int pid = fork();
					if(pid == 0){
						servir(s2);
						exit(0);
					}
				}
			}
			serv.cerrar();
			std::cout << "Sale el servidor\n";
			exit(0);
		}
	}
	else{
		std::cout << "El server ya esta corriendo\n";
	}

	sleep(2);

	std::cout << "Intento conectarme\n";
	Socket s("localhost", 1234);

	if(s.conectar()){
		char buffer[256];

		std::cout << "OK. Conectado. Empiezo a enviar\n";

		while(s.esValido()){
			std::cout << "Ingrese texto a mandar\n";
			std::cin.getline(buffer, 256);
			s.enviar(&buffer, strlen(buffer));
		}
	}

	std::cout << "Sale el cliente\n";
	
	s.cerrar();
	return 0;
}
